home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1994 March / Internet Info CD-ROM (Walnut Creek) (March 1994).iso / networking / ip / ka9q / alpha.arc / ECVECAT.ASM < prev    next >
Assembly Source File  |  1988-04-16  |  3KB  |  161 lines

  1. ; alternative to ecvec.asm -- WORKS ON PC/ATs (80826) only!
  2.  
  3.     mod186
  4.     include lmacros.h
  5.  
  6. ; Conditional ES save/restore macros not in lmacros.h
  7. pushes    macro
  8.     ifdef LONGPTR
  9.     push    es
  10.     endif
  11.     endm
  12.  
  13. popes    macro
  14.     ifdef LONGPTR
  15.     pop    es
  16.     endif
  17.     endm
  18.  
  19.     assume    ds:dataseg
  20.     assume    cs:codeseg
  21.     public    sssave,spsave,intstk
  22.  
  23.     ifdef    FARPROC
  24.     extrn    doret:far,ecint_:far,getintds:far
  25.     else
  26.     extrn    doret:near,ecint_:near,getintds:near
  27.     endif
  28.  
  29. ; ec0vec - Ethernet interrupt handler
  30.     public    ec0vec_
  31.  
  32. ec0vec_ proc    far
  33.     push    ds        ; save on user stack
  34.     call    getintds    ; establish interrupt data segment
  35.  
  36.     mov    ds:sssave,ss    ; stash user stack context
  37.     mov    ds:spsave,sp
  38.  
  39.     push    ds
  40.     pop    ss
  41.     lea    sp,intstk+512
  42.  
  43.     push    ax        ; save user regs on interrupt stack
  44.     push    bx
  45.     push    cx
  46.     push    dx
  47.     push    bp
  48.     push    si
  49.     push    di
  50.     push    es
  51.     push    ds
  52.     pop    es
  53.  
  54.     mov    ax,0        ; arg for service routine
  55.     push    ax
  56.     call    ecint_
  57.     pop    ax
  58.     jmp    doret
  59. ec0vec_    endp
  60.  
  61. ; ec1vec - Ethernet interrupt handler
  62.     public    ec1vec_
  63.  
  64. ec1vec_ proc    far
  65.     push    ds        ; save on user stack
  66.     call    getintds    ; establish interrupt data segment
  67.  
  68.     mov    ds:sssave,ss    ; stash user stack context
  69.     mov    ds:spsave,sp
  70.  
  71.     push    ds
  72.     pop    ss
  73.     lea    sp,intstk+512
  74.  
  75.     push    ax        ; save user regs on interrupt stack
  76.     push    bx
  77.     push    cx
  78.     push    dx
  79.     push    bp
  80.     push    si
  81.     push    di
  82.     push    es
  83.     push    ds
  84.     pop    es
  85.  
  86.     mov    ax,1        ; arg for service routine
  87.     push    ax
  88.     call    ecint_
  89.     pop    ax
  90.     jmp    doret
  91. ec1vec_    endp
  92.  
  93. ; ec2vec - Ethernet interrupt handler
  94.     public    ec2vec_
  95.  
  96. ec2vec_ proc    far
  97.     push    ds        ; save on user stack
  98.     call    getintds    ; establish interrupt data segment
  99.  
  100.     mov    ds:sssave,ss    ; stash user stack context
  101.     mov    ds:spsave,sp
  102.  
  103.     push    ds
  104.     pop    ss
  105.     lea    sp,intstk+512
  106.  
  107.     push    ax        ; save user regs on interrupt stack
  108.     push    bx
  109.     push    cx
  110.     push    dx
  111.     push    bp
  112.     push    si
  113.     push    di
  114.     push    es
  115.     push    ds
  116.     pop    es
  117.  
  118.     mov    ax,2        ; arg for service routine
  119.     push    ax
  120.     call    ecint_
  121.     pop    ax
  122.     jmp    doret
  123. ec2vec_    endp
  124.  
  125. ; fast buffer I/O routines -- used by 3-COM Ethernet controller
  126.  
  127. ; outbuf - put a buffer to an output port
  128.     procdef outbuf,<<oport,word>,<obuf,ptr>,<ocnt,word>>
  129.     pushf
  130.     push    si
  131.     pushds
  132.     mov    dx,oport
  133.     mov    cx,ocnt
  134.     ldptr    si,obuf,ds    ; ds:si = obuf
  135.     cld
  136.     rep outsb        ; works only on PC/AT (80286)
  137.     popds
  138.     pop    si
  139.     popf
  140.     pret
  141.     pend    outbuf
  142.  
  143. ; inbuf - get a buffer from an input port
  144.     procdef inbuf,<<iport,word>,<ibuf,ptr>,<icnt,word>>
  145.     pushf
  146.     push    di
  147.     pushes
  148.     mov    dx,iport
  149.     mov    cx,icnt
  150.     ldptr    di,ibuf,es    ; es:di = ibuf (es already set in small model)
  151.     cld
  152.     rep insb        ; works only on PC/AT (80286)
  153.     popes
  154.     pop    di
  155.     popf
  156.     pret
  157.     pend    inbuf
  158.  
  159.     end
  160.  
  161.